1 Data Preparation: Gas Stations

The gas station data set was used for the first part of this analysis. In the gas station data set, there are 72798 observations of 32 variables. Some variables include: state, county, address, coordinates, description, address, and point of compromise (POC).

Using this data set, a new data set was created by randomly selecting 500 observations. The resulting data set was 500 observations of all 32 variables.

gas <- read.csv(file="https://isarenn.github.io/irennenberg/Week7/POC.csv") #reading in the dataset from githbub

gas2 <-gas[sample(nrow(gas), size=500),] #Getting a random sample

2 Gas Stations: Interactive Map

Using the R Map Library, the following interactive map of the gas station data was created. The pop ups include:

  • State
  • County
  • Address
  • Zip Code
label.msg<-paste(paste("State", gas2$STATE), paste("County", gas2$county),
                 paste("Address", gas2$ADDRESS), paste("Zip", gas2$ZIPnew))

# making static leaflet map
leaflet(gas2) %>%
  addTiles() %>% 
  setView(lng=mean(gas2$xcoord), lat=mean(gas2$ycoord), zoom = 14) %>%
   addRectangles(
    lng1 = min(gas2$xcoord), lat1 = min(gas2$ycoord),
    lng2 = max(gas2$xcoord), lat2 = max(gas2$ycoord),
    fillColor = "transparent" 
    ) %>%
  fitBounds(
    lng1 = min(gas2$xcoord), lat1 = min(gas2$ycoord),
    lng2 = max(gas2$xcoord), lat2 = max(gas2$ycoord) ) %>%
  addMarkers(~xcoord, ~ycoord, label = ~label.msg)

3 Data Prepartion: Philadelphia Crime Data

Another data set was used: Philly Crime data. This data set shows longitudinal crime cases since 2014. There are 15520 observations and 18 variables in this dataset.

From this data set, the year was extracted from the date and a new variable “year” was created.

Additionally, a subset was made with only 2023 data.

crime <- read.csv(file="https://isarenn.github.io/irennenberg/Week7/PhillyCrimeSince2015.csv") #reading in the dataset from githbub

crime$year <- format(as.Date(crime$date, format="%m/%d/%Y %H:%M"), "%Y")

d2023crime <- crime %>%
  filter(year=='2023')

4 Philadelphia Crime: Interactive Map

Using the above data set, the following map was created to plot crime locations. Different colors were used to label fatal and non fatal crimes.

The hover included the following information:

  • Sex
  • Fatality?
  • Neighborhood
  • Race
  • Date
  • Police District
map_options <- list(
  scope = 'usa',
  projection = list(type = 'regular usa'),
  showlakes = TRUE,
  lakecolor = toRGB('white')
)

###
plot_geo(d2023crime, lat = ~lat, lon = ~lng) %>% 
  add_markers( text = ~paste(sex, fatal, neighborhood, race, date,
                             paste("Police District:", police_district), 
                             sep = "<br>"),
              color = ~fatal, 
              symbol = "circle", 
              hoverinfo = "text")   %>% 
  colorbar(title = "Fatality<br>2011.2")  %>% 
  layout( title = 'Philadelphia Crime 2023',  geo=list(
      scope = 'usa',
      center=list(lat=39.952583, lon=-75.165222),
      projection = list(scale = 300)
    )
  )

From the map, we can see that the majority of crimes were non fatal. We can also see that there were very many crimes in 2023.The crimes are clustered in the center-most portion of the city, and are less condensed the farther away from the center you go.

Thank you!

LS0tDQp0aXRsZTogIlZpc3VhbGl6aW5nIFNwYXRpYWwgSW5mb3JtYXRpb24iDQphdXRob3I6ICJJc2FiZWxsZSBSZW5uZW5iZXJnIg0Kb3V0cHV0OiANCiAgaHRtbF9kb2N1bWVudDogDQogICAgY29kZV9mb2xkaW5nOiBoaWRlDQogICAgdG9jOiB0cnVlDQogICAgdG9jX2Zsb2F0OiB0cnVlDQogICAgdG9jX2NvbGxhcHNlZDogdHJ1ZQ0KICAgIHRvY19kZXB0aDogNA0KICAgIHRoZW1lOiAic3BhY2VsYWIiDQogICAgbnVtYmVyX3NlY3Rpb25zOiB0cnVlDQogICAgY29kZV9kb3dubG9hZDogdHJ1ZQ0KICAgICAgDQogICAgDQotLS0gIA0KDQoNCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQoNCmgxLnRpdGxlIHsNCiAgZm9udC1zaXplOiAzOHB4Ow0KICBjb2xvcjogIzAwMDBGRjsNCiAgdGV4dC1hbGlnbjogY2VudGVyOw0KfQ0KaDQuYXV0aG9yIHsgLyogSGVhZGVyIDQgLSBhbmQgdGhlIGF1dGhvciBhbmQgZGF0YSBoZWFkZXJzIHVzZSB0aGlzIHRvbyAgKi8NCiAgICBmb250LXNpemU6IDE4cHg7DQogIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOw0KICBjb2xvcjogIzQxYjZjNDsNCiAgdGV4dC1hbGlnbjogY2VudGVyOw0KfQ0KaDEgew0KICAgIGZvbnQtc2l6ZTogMjJweDsNCiAgICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsNCiAgICBjb2xvcjogIzQxYjZjNDsNCiAgICB0ZXh0LWFsaWduOiBsZWZ0Ow0KfQ0KPC9zdHlsZT4NCg0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0NCiMgY29kZSBjaHVuayBzcGVjaWZpZXMgd2hldGhlciB0aGUgUiBjb2RlLCB3YXJuaW5ncywgYW5kIG91dHB1dCANCiMgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgb3V0cHV0IGZpbGVzLg0KaWYgKCFyZXF1aXJlKCJ0aWR5dmVyc2UiKSkgew0KICAgaW5zdGFsbC5wYWNrYWdlcygidGlkeXZlcnNlIikNCiAgIGxpYnJhcnkodGlkeXZlcnNlKQ0KfQ0KaWYgKCFyZXF1aXJlKCJrbml0ciIpKSB7DQogICBpbnN0YWxsLnBhY2thZ2VzKCJrbml0ciIpDQogICBsaWJyYXJ5KGtuaXRyKQ0KfQ0KaWYgKCFyZXF1aXJlKCJwbG90bHkiKSkgew0KICAgaW5zdGFsbC5wYWNrYWdlcygicGxvdGx5IikNCiAgIGxpYnJhcnkocGxvdGx5KQ0KfQ0KaWYgKCFyZXF1aXJlKCJnYXBtaW5kZXIiKSkgew0KICAgaW5zdGFsbC5wYWNrYWdlcygiZ2FwbWluZGVyIikNCiAgIGxpYnJhcnkoZ2FwbWluZGVyKQ0KfQ0KaWYgKCFyZXF1aXJlKCJSQ3VybCIpKSB7DQogICAgaW5zdGFsbC5wYWNrYWdlcygiUkN1cmwiKSAgICAgICAgICAgICAjIEluc3RhbGwgUkN1cmwgcGFja2FnZQ0KICAgIGxpYnJhcnkoIlJDdXJsIikNCn0NCmlmICghcmVxdWlyZSgiY29sb3VycGlja2VyIikpIHsNCiAgICBpbnN0YWxsLnBhY2thZ2VzKCJjb2xvdXJwaWNrZXIiKSAgICAgICAgICAgICAgDQogICAgbGlicmFyeSgiY29sb3VycGlja2VyIikNCn0NCmlmICghcmVxdWlyZSgiZ2dhbmltYXRlIikpIHsNCiAgICBpbnN0YWxsLnBhY2thZ2VzKCJnZ2FuaW1hdGUiKSAgICAgICAgICAgICAgDQogICAgbGlicmFyeSgiZ2dhbmltYXRlIikNCn0NCmlmICghcmVxdWlyZSgiZ2lmc2tpIikpIHsNCiAgICBpbnN0YWxsLnBhY2thZ2VzKCJnaWZza2kiKSAgICAgICAgICAgICAgDQogICAgbGlicmFyeSgiZ2lmc2tpIikNCn0NCmlmICghcmVxdWlyZSgibWFnaWNrIikpIHsNCiAgICBpbnN0YWxsLnBhY2thZ2VzKCJtYWdpY2siKSAgICAgICAgICAgICAgDQogICAgbGlicmFyeSgibWFnaWNrIikNCn0NCmlmICghcmVxdWlyZSgiZ3JEZXZpY2VzIikpIHsNCiAgICBpbnN0YWxsLnBhY2thZ2VzKCJnckRldmljZXMiKSAgICAgICAgICAgICAgDQogICAgbGlicmFyeSgiZ3JEZXZpY2VzIikNCn0NCmlmICghcmVxdWlyZSgibGVhZmxldCIpKSB7DQogICAgaW5zdGFsbC5wYWNrYWdlcygibGVhZmxldCIpICAgICAgICAgICAgICANCiAgICBsaWJyYXJ5KCJsZWFmbGV0IikNCn0NCmlmICghcmVxdWlyZSgibWFwcyIpKSB7DQogICAgaW5zdGFsbC5wYWNrYWdlcygibWFwcyIpICAgICAgICAgICAgICANCiAgICBsaWJyYXJ5KCJtYXBzIikNCn0NCmlmICghcmVxdWlyZSgiaHRtbHRvb2xzIikpIHsNCiAgICBpbnN0YWxsLnBhY2thZ2VzKCJodG1sdG9vbHMiKSAgICAgICAgICAgICAgDQogICAgbGlicmFyeSgiaHRtbHRvb2xzIikNCn0NCmlmICghcmVxdWlyZSgiaHRtbHdpZGdldHMiKSkgew0KICAgIGluc3RhbGwucGFja2FnZXMoImh0bWx3aWRnZXRzIikgICAgICAgICAgICAgIA0KICAgIGxpYnJhcnkoImh0bWx3aWRnZXRzIikNCn0NCmlmICghcmVxdWlyZSgibGVhZmxlZ2VuZCIpKSB7DQogICAgaW5zdGFsbC5wYWNrYWdlcygibGVhZmxlZ2VuZCIpICAgICAgICAgICAgICANCiAgICBsaWJyYXJ5KCJsZWFmbGVnZW5kIikNCn0NCmlmICghcmVxdWlyZSgiZ2VvanNvbmlvIikpIHsNCiAgICBpbnN0YWxsLnBhY2thZ2VzKCJnZW9qc29uaW8iKSAgICAgICAgICAgICAgDQogICAgbGlicmFyeSgiZ2VvanNvbmlvIikNCn0NCmlmICghcmVxdWlyZSgic3RyaW5naSIpKSB7DQogICAgaW5zdGFsbC5wYWNrYWdlcygic3RyaW5naSIpICAgICAgICAgICAgICANCiAgICBsaWJyYXJ5KCJzdHJpbmdpIikNCn0NCmlmICghcmVxdWlyZSgiUkNvbG9yQnJld2VyIikpIHsNCiAgICBpbnN0YWxsLnBhY2thZ2VzKCJSQ29sb3JCcmV3ZXIiKSAgICAgICAgICAgICAgDQogICAgbGlicmFyeSgiUkNvbG9yQnJld2VyIikNCn0NCmlmICghcmVxdWlyZSgidGlncmlzIikpIHsNCiAgICBpbnN0YWxsLnBhY2thZ2VzKCJ0aWdyaXMiKSAgICAgICAgICAgICAgDQogICAgbGlicmFyeSgidGlncmlzIikNCn0NCmlmICghcmVxdWlyZSgibGVhZnBvcCIpKSB7DQogICAgaW5zdGFsbC5wYWNrYWdlcygibGVhZnBvcCIpICAgICAgICAgICAgICANCiAgICBsaWJyYXJ5KCJsZWFmcG9wIikNCn0NCmlmICghcmVxdWlyZSgibGVhZmVtIikpIHsNCiAgICBpbnN0YWxsLnBhY2thZ2VzKCJsZWFmZW0iKSAgICAgICAgICAgICAgDQogICAgbGlicmFyeSgibGVhZmVtIikNCn0NCmlmICghcmVxdWlyZSgidG1hcCIpKSB7DQogICAgaW5zdGFsbC5wYWNrYWdlcygidG1hcCIpICAgICAgICAgICAgICANCiAgICBsaWJyYXJ5KCJ0bWFwIikNCn0NCmlmICghcmVxdWlyZSgidG1hcHRvb2xzIikpIHsNCiAgICBpbnN0YWxsLnBhY2thZ2VzKCJ0bWFwdG9vbHMiKSAgICAgICAgICAgICAgDQogICAgbGlicmFyeSgidG1hcHRvb2xzIikNCn0NCmlmICghcmVxdWlyZSgid2Vic2hvdDIiKSkgew0KICAgIGluc3RhbGwucGFja2FnZXMoIndlYnNob3QyIikgICAgICAgICAgICAgIA0KICAgIGxpYnJhcnkoIndlYnNob3QyIikNCn0NCmlmICghcmVxdWlyZSgic2YiKSkgew0KICAgIGluc3RhbGwucGFja2FnZXMoInNmIikgICAgICAgICAgICAgIA0KICAgIGxpYnJhcnkoInNmIikNCn0NCmlmICghcmVxdWlyZSgidGVycmEiKSkgew0KICAgIGluc3RhbGwucGFja2FnZXMoInRlcnJhIikgICAgICAgICAgICAgIA0KICAgIGxpYnJhcnkoInRlcnJhIikNCn0NCmlmICghcmVxdWlyZSgibGVhZnBvcCIpKSB7DQogICAgaW5zdGFsbC5wYWNrYWdlcygibGVhZnBvcCIpICAgICAgICAgICAgICANCiAgICBsaWJyYXJ5KCJsZWFmcG9wIikNCn0NCg0KIyMNCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSwgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgd2FybmluZyA9IEZBTFNFLCAgIA0KICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IFRSVUUsICAgDQogICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IEZBTFNFLA0KICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnQgPSBOQSkNCmBgYA0KDQojIERhdGEgUHJlcGFyYXRpb246IEdhcyBTdGF0aW9ucw0KDQpUaGUgZ2FzIHN0YXRpb24gZGF0YSBzZXQgd2FzIHVzZWQgZm9yIHRoZSBmaXJzdCBwYXJ0IG9mIHRoaXMgYW5hbHlzaXMuIEluIHRoZSBnYXMgc3RhdGlvbiBkYXRhIHNldCwgdGhlcmUgYXJlIDcyNzk4IG9ic2VydmF0aW9ucyBvZiAzMiB2YXJpYWJsZXMuIFNvbWUgdmFyaWFibGVzIGluY2x1ZGU6IHN0YXRlLCBjb3VudHksIGFkZHJlc3MsIGNvb3JkaW5hdGVzLCBkZXNjcmlwdGlvbiwgYWRkcmVzcywgYW5kIHBvaW50IG9mIGNvbXByb21pc2UgKFBPQykuDQoNClVzaW5nIHRoaXMgZGF0YSBzZXQsIGEgbmV3IGRhdGEgc2V0IHdhcyBjcmVhdGVkIGJ5IHJhbmRvbWx5IHNlbGVjdGluZyA1MDAgb2JzZXJ2YXRpb25zLiBUaGUgcmVzdWx0aW5nIGRhdGEgc2V0IHdhcyA1MDAgb2JzZXJ2YXRpb25zIG9mIGFsbCAzMiB2YXJpYWJsZXMuIA0KDQpgYGB7cn0NCg0KZ2FzIDwtIHJlYWQuY3N2KGZpbGU9Imh0dHBzOi8vaXNhcmVubi5naXRodWIuaW8vaXJlbm5lbmJlcmcvV2VlazcvUE9DLmNzdiIpICNyZWFkaW5nIGluIHRoZSBkYXRhc2V0IGZyb20gZ2l0aGJ1Yg0KDQpnYXMyIDwtZ2FzW3NhbXBsZShucm93KGdhcyksIHNpemU9NTAwKSxdICNHZXR0aW5nIGEgcmFuZG9tIHNhbXBsZQ0KDQoNCmBgYA0KDQojIEdhcyBTdGF0aW9uczogSW50ZXJhY3RpdmUgTWFwDQoNClVzaW5nIHRoZSBSIE1hcCBMaWJyYXJ5LCB0aGUgZm9sbG93aW5nIGludGVyYWN0aXZlIG1hcCBvZiB0aGUgZ2FzIHN0YXRpb24gZGF0YSB3YXMgY3JlYXRlZC4gVGhlIHBvcCB1cHMgaW5jbHVkZTogDQoNCiogKipTdGF0ZSoqDQoqICoqQ291bnR5KioNCiogKipBZGRyZXNzKioNCiogKipaaXAgQ29kZSoqDQoNCmBgYHtyIGZpZy5hbGlnbj0nY2VudGVyJywgZmlnLmhlaWdodD00LCBmaWcud2lkdGg9Nn0NCg0KbGFiZWwubXNnPC1wYXN0ZShwYXN0ZSgiU3RhdGUiLCBnYXMyJFNUQVRFKSwgcGFzdGUoIkNvdW50eSIsIGdhczIkY291bnR5KSwNCiAgICAgICAgICAgICAgICAgcGFzdGUoIkFkZHJlc3MiLCBnYXMyJEFERFJFU1MpLCBwYXN0ZSgiWmlwIiwgZ2FzMiRaSVBuZXcpKQ0KDQojIG1ha2luZyBzdGF0aWMgbGVhZmxldCBtYXANCmxlYWZsZXQoZ2FzMikgJT4lDQogIGFkZFRpbGVzKCkgJT4lIA0KICBzZXRWaWV3KGxuZz1tZWFuKGdhczIkeGNvb3JkKSwgbGF0PW1lYW4oZ2FzMiR5Y29vcmQpLCB6b29tID0gMTQpICU+JQ0KICAgYWRkUmVjdGFuZ2xlcygNCiAgICBsbmcxID0gbWluKGdhczIkeGNvb3JkKSwgbGF0MSA9IG1pbihnYXMyJHljb29yZCksDQogICAgbG5nMiA9IG1heChnYXMyJHhjb29yZCksIGxhdDIgPSBtYXgoZ2FzMiR5Y29vcmQpLA0KICAgIGZpbGxDb2xvciA9ICJ0cmFuc3BhcmVudCIgDQogICAgKSAlPiUNCiAgZml0Qm91bmRzKA0KICAgIGxuZzEgPSBtaW4oZ2FzMiR4Y29vcmQpLCBsYXQxID0gbWluKGdhczIkeWNvb3JkKSwNCiAgICBsbmcyID0gbWF4KGdhczIkeGNvb3JkKSwgbGF0MiA9IG1heChnYXMyJHljb29yZCkgKSAlPiUNCiAgYWRkTWFya2Vycyh+eGNvb3JkLCB+eWNvb3JkLCBsYWJlbCA9IH5sYWJlbC5tc2cpDQoNCmBgYA0KDQojIERhdGEgUHJlcGFydGlvbjogUGhpbGFkZWxwaGlhIENyaW1lIERhdGENCg0KQW5vdGhlciBkYXRhIHNldCB3YXMgdXNlZDogUGhpbGx5IENyaW1lIGRhdGEuIFRoaXMgZGF0YSBzZXQgc2hvd3MgbG9uZ2l0dWRpbmFsIGNyaW1lIGNhc2VzIHNpbmNlIDIwMTQuIFRoZXJlIGFyZSAxNTUyMCBvYnNlcnZhdGlvbnMgYW5kIDE4IHZhcmlhYmxlcyBpbiB0aGlzIGRhdGFzZXQuIA0KDQpGcm9tIHRoaXMgZGF0YSBzZXQsIHRoZSB5ZWFyIHdhcyBleHRyYWN0ZWQgZnJvbSB0aGUgZGF0ZSBhbmQgYSBuZXcgdmFyaWFibGUgInllYXIiIHdhcyBjcmVhdGVkLiANCg0KQWRkaXRpb25hbGx5LCBhIHN1YnNldCB3YXMgbWFkZSB3aXRoIG9ubHkgMjAyMyBkYXRhLiANCg0KYGBge3J9DQoNCmNyaW1lIDwtIHJlYWQuY3N2KGZpbGU9Imh0dHBzOi8vaXNhcmVubi5naXRodWIuaW8vaXJlbm5lbmJlcmcvV2VlazcvUGhpbGx5Q3JpbWVTaW5jZTIwMTUuY3N2IikgI3JlYWRpbmcgaW4gdGhlIGRhdGFzZXQgZnJvbSBnaXRoYnViDQoNCmNyaW1lJHllYXIgPC0gZm9ybWF0KGFzLkRhdGUoY3JpbWUkZGF0ZSwgZm9ybWF0PSIlbS8lZC8lWSAlSDolTSIpLCAiJVkiKQ0KDQpkMjAyM2NyaW1lIDwtIGNyaW1lICU+JQ0KICBmaWx0ZXIoeWVhcj09JzIwMjMnKQ0KDQpgYGANCg0KIyBQaGlsYWRlbHBoaWEgQ3JpbWU6IEludGVyYWN0aXZlIE1hcA0KDQpVc2luZyB0aGUgYWJvdmUgZGF0YSBzZXQsIHRoZSBmb2xsb3dpbmcgbWFwIHdhcyBjcmVhdGVkIHRvIHBsb3QgY3JpbWUgbG9jYXRpb25zLiBEaWZmZXJlbnQgY29sb3JzIHdlcmUgdXNlZCB0byBsYWJlbCBmYXRhbCBhbmQgbm9uIGZhdGFsIGNyaW1lcy4gDQoNClRoZSBob3ZlciBpbmNsdWRlZCB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOg0KDQoqICoqU2V4KioNCiogKipGYXRhbGl0eT8qKg0KKiAqKk5laWdoYm9yaG9vZCoqDQoqICoqUmFjZSoqDQoqICoqRGF0ZSoqDQoqICoqUG9saWNlIERpc3RyaWN0KioNCg0KYGBge3J9DQoNCm1hcF9vcHRpb25zIDwtIGxpc3QoDQogIHNjb3BlID0gJ3VzYScsDQogIHByb2plY3Rpb24gPSBsaXN0KHR5cGUgPSAncmVndWxhciB1c2EnKSwNCiAgc2hvd2xha2VzID0gVFJVRSwNCiAgbGFrZWNvbG9yID0gdG9SR0IoJ3doaXRlJykNCikNCg0KIyMjDQpwbG90X2dlbyhkMjAyM2NyaW1lLCBsYXQgPSB+bGF0LCBsb24gPSB+bG5nKSAlPiUgDQogIGFkZF9tYXJrZXJzKCB0ZXh0ID0gfnBhc3RlKHNleCwgZmF0YWwsIG5laWdoYm9yaG9vZCwgcmFjZSwgZGF0ZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzdGUoIlBvbGljZSBEaXN0cmljdDoiLCBwb2xpY2VfZGlzdHJpY3QpLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VwID0gIjxicj4iKSwNCiAgICAgICAgICAgICAgY29sb3IgPSB+ZmF0YWwsIA0KICAgICAgICAgICAgICBzeW1ib2wgPSAiY2lyY2xlIiwgDQogICAgICAgICAgICAgIGhvdmVyaW5mbyA9ICJ0ZXh0IikgICAlPiUgDQogIGNvbG9yYmFyKHRpdGxlID0gIkZhdGFsaXR5PGJyPjIwMTEuMiIpICAlPiUgDQogIGxheW91dCggdGl0bGUgPSAnUGhpbGFkZWxwaGlhIENyaW1lIDIwMjMnLCAgZ2VvPWxpc3QoDQogICAgICBzY29wZSA9ICd1c2EnLA0KICAgICAgY2VudGVyPWxpc3QobGF0PTM5Ljk1MjU4MywgbG9uPS03NS4xNjUyMjIpLA0KICAgICAgcHJvamVjdGlvbiA9IGxpc3Qoc2NhbGUgPSAzMDApDQogICAgKQ0KICApDQoNCmBgYA0KRnJvbSB0aGUgbWFwLCB3ZSBjYW4gc2VlIHRoYXQgdGhlIG1ham9yaXR5IG9mIGNyaW1lcyB3ZXJlIG5vbiBmYXRhbC4gV2UgY2FuIGFsc28gc2VlIHRoYXQgdGhlcmUgd2VyZSB2ZXJ5IG1hbnkgY3JpbWVzIGluIDIwMjMuVGhlIGNyaW1lcyBhcmUgY2x1c3RlcmVkIGluIHRoZSBjZW50ZXItbW9zdCBwb3J0aW9uIG9mIHRoZSBjaXR5LCBhbmQgYXJlIGxlc3MgY29uZGVuc2VkIHRoZSBmYXJ0aGVyIGF3YXkgZnJvbSB0aGUgY2VudGVyIHlvdSBnby4gDQoNClRoYW5rIHlvdSENCg==